package week03review;

import java.util.ArrayList;
import java.util.Collection;

/**
 * 1.String字符串类型:
 * -java.lang.String类使用final修饰，不能被继承
 * -String的底层封装的是一个字符数组
 * -String在内存中采用Unicode编码模式，每个字符占用2个字节的内存空间
 * -字符串对象一旦创建，对象内容就永远无法改变，但字符串引用可以重新赋值，指向一个新的对象
 * -String称为不变对象
 *
 * 2.字符串常量池：是java对String的一个优化措施
 * -java推荐我们使用字面量/直接量(直接"")的方式来创建字符串对象，并且会将所有以字面量方式创建的对象缓存到常量池中，
 * -当使用相同字面量再创建字符串对象时将会复用常量池中的对象，以减少内存开销。
 *
 * 3.String常用方法:
 * --length(): 返回当前字符串的长度
 * --trim():    去除当前字符串两边的空白字符
 * --toUpperCase()/toLoweCase():    将字符串中所有英文字母全部改为大写/小写
 * --startsWith()/endWith():        判断当前字符串是否以给定的字符串开头或结尾
 * --charAt():                  返回当前字符串指定位置的字符----根据位置找字符
 * --indexOf()/lastIndexOf():       检索给定字符串在但当前字符串中第一次/最后一次出现的位置
 * --substring():           截取当前字符串给定范围内的字符串(含头不含尾)
 * --静态方法valueOf():       将其他数据类型转换为String
 *
 * 4.StringBuilder类：
 * -由于String是不变对象，每次修改内容都会创建新的对象，因此String不适合频繁修改操作，为了解决这个问题，java提供了StringBuilder类。
 * -StringBuilder类是专门用于修改字符串的一个类，内部维护一个可变的char数组，所做操作都是在这个数组之上进行的，
 * -修改速度、性能优秀，并且提供了修改字符串的常见方式：增、删、改、插。
 * StringBuilder常用方法:
 * --append():      追加内容
 * --delete():      删除部分内容
 * --replace():     替换部分内容
 * --insert():      插入内容
 * */
public class String01Test {
    public static void main(String[] args) {
        String str = "   Api周末复习字符串String   ";
        System.out.println("初始字符串为:"+str);
        System.out.println("初始字符串的长度为:"+str.length());//22

        str = str.trim();//去除两边空白字符
        System.out.println("字符串为:"+str);
        System.out.println("去除空白字符后字符串长度为:"+str.length());//16

        String upper = str.toUpperCase();
        System.out.println("所有字母改为大写后的字符串为:"+upper);
        String lowe = str.toLowerCase();
        System.out.println("所有字母改为小写后的字符串为:"+lowe);

        boolean b1 = str.startsWith("Api");//T
        boolean b2 = str.endsWith("inn");//F
        System.out.println("字符串开头是否为Api:"+b1+",字符串结尾是否为inn:"+b2);

        char ch = str.charAt(7);//返回字符串位置为7的字符
        System.out.println("字符串下标为7的元素为:"+ch);//字

        int i = str.indexOf("周末");
        System.out.println("字符串周末第一次出现的位置是:"+i);//3
        int j = str.indexOf("i",3);//从下标为3开始寻找i第一次出现的位置
        System.out.println("从下标为3开始i第一次出现的位置为:"+j);//13

        String str1 = str.substring(3,10);
        System.out.println("截取字符串下标从3到10的子串为:"+str1);//周末复习字符串

        int a = 123;
        String str11 = String.valueOf(a);//将int类型123转化为String型
        System.out.println(str11);
        System.out.println("--------------------------------");
         /* StringBuilder常用方法:
            --append():      追加内容
            --delete():      删除部分内容
            --replace():     替换部分内容
            --insert():      插入内容
          */

        String str05 = "StringBuilder的常用方法";
        StringBuilder builder = new StringBuilder(str05);
        System.out.println("builder:"+builder);//将str05复制到builder中

        builder.append("有增删改插。");
        System.out.println(builder);//StringBuilder的常用方法有增删改插。

        builder.delete(14,16);
        System.out.println(builder);//StringBuilder的方法有增删改插。

        builder.replace(14,16,"四种方法");
        System.out.println(builder);

        builder.insert(0,"周末复习");
        System.out.println(builder);//周末复习StringBuilder的四种方法有增删改插。

        //StringBuilder的创建方式:
        StringBuilder builder2 = new StringBuilder();
        StringBuilder builder3 = new StringBuilder("123");


        /*String和StringBuilder互转:
        String str = "abc";
        StringBuilder builder3 = new StringBuilder(str); //abc串
        String str2 = builder3.toString();
        */
    }
}
